home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / util / moni / Scout-src.lha / source / hexdump.c next >
C/C++ Source or Header  |  2002-09-16  |  11KB  |  298 lines

  1. #include "system_headers.h"
  2.  
  3. /* /// "khexdump" */
  4. void khexdump( UBYTE *buffer,
  5.                LONG size )
  6. {
  7.     ULONG cnt;
  8.     UBYTE c;
  9.     ULONG addr;
  10.  
  11.     addr = 0;
  12.     while (size >= 16) {
  13.         UWORD bw[8];
  14.         UBYTE *bb;
  15.         memcpy(&bw[0], buffer, sizeof(UWORD) * 8);
  16.         bb = (UBYTE *)&bw[0];
  17.         kprintf("%08lx: %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx  ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5], bw[6], bw[7]);
  18.         for (cnt = 0; cnt < 16; cnt++) {
  19.             c = bb[cnt];
  20.             kprintf("%lc", isprint(c) ? c : '.');
  21.         }
  22.         kprintf("\n");
  23.         size -= 16;
  24.         addr += 16;
  25.         buffer += 16;
  26.     }
  27.     if (size >= 14) {
  28.         UWORD bw[8];
  29.         UBYTE *bb;
  30.         memcpy(&bw[0], buffer, sizeof(UWORD) * 8);
  31.         bb = (UBYTE *)&bw[0];
  32.         kprintf("%08lx: %04lx %04lx %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5], bw[6]);
  33.         for (cnt = 14; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  34.         for (cnt = size; cnt < 16; cnt++) kprintf("  ");
  35.         kprintf("  ");
  36.         for (cnt = 0; cnt < size; cnt++) {
  37.             c = bb[cnt];
  38.             kprintf("%lc", isprint(c) ? c : '.');
  39.         }
  40.         kprintf("\n");
  41.     } else if (size >= 12) {
  42.         UWORD bw[7];
  43.         UBYTE *bb;
  44.         memcpy(&bw[0], buffer, sizeof(UWORD) * 7);
  45.         bb = (UBYTE *)&bw[0];
  46.         kprintf("%08lx: %04lx %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5]);
  47.         for (cnt = 12; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  48.         for (cnt = size; cnt < 16; cnt++) kprintf("  ");
  49.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  50.         kprintf("  ");
  51.         for (cnt = 0; cnt < size; cnt++) {
  52.             c = bb[cnt];
  53.             kprintf("%lc", isprint(c) ? c : '.');
  54.         }
  55.         kprintf("\n");
  56.     } else if (size >= 10) {
  57.         UWORD bw[6];
  58.         UBYTE *bb;
  59.         memcpy(&bw[0], buffer, sizeof(UWORD) * 6);
  60.         bb = (UBYTE *)&bw[0];
  61.         kprintf("%08lx: %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4]);
  62.         for (cnt = 10; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  63.         for (cnt = size; cnt < 16; cnt++) kprintf("  ");
  64.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  65.         kprintf("  ");
  66.         for (cnt = 0; cnt < size; cnt++) {
  67.             c = bb[cnt];
  68.             kprintf("%lc", isprint(c) ? c : '.');
  69.         }
  70.         kprintf("\n");
  71.     } else if (size >= 8) {
  72.         UWORD bw[5];
  73.         UBYTE *bb;
  74.         memcpy(&bw[0], buffer, sizeof(UWORD) * 5);
  75.         bb = (UBYTE *)&bw[0];
  76.         kprintf("%08lx: %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3]);
  77.         for (cnt = 8; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  78.         for (cnt = size; cnt < 12; cnt++) kprintf("  ");
  79.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  80.         kprintf("           ");
  81.         for (cnt = 0; cnt < size; cnt++) {
  82.             c = bb[cnt];
  83.             kprintf("%lc", isprint(c) ? c : '.');
  84.         }
  85.         kprintf("\n");
  86.     } else if (size >= 6) {
  87.         UWORD bw[4];
  88.         UBYTE *bb;
  89.         memcpy(&bw[0], buffer, sizeof(UWORD) * 4);
  90.         bb = (UBYTE *)&bw[0];
  91.         kprintf("%08lx: %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2]);
  92.         for (cnt = 6; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  93.         for (cnt = size; cnt < 8; cnt++) kprintf("  ");
  94.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  95.         kprintf("                   ");
  96.         for (cnt = 0; cnt < size; cnt++) {
  97.             c = bb[cnt];
  98.             kprintf("%lc", isprint(c) ? c : '.');
  99.         }
  100.         kprintf("\n");
  101.     } else if (size >= 4) {
  102.         UWORD bw[3];
  103.         UBYTE *bb;
  104.         memcpy(&bw[0], buffer, sizeof(UWORD) * 3);
  105.         bb = (UBYTE *)&bw[0];
  106.         kprintf("%08lx: %04lx %04lx ", addr, bw[0], bw[1]);
  107.         for (cnt = 4; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  108.         for (cnt = size; cnt < 8; cnt++) kprintf("  ");
  109.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  110.         kprintf("                    ");
  111.         for (cnt = 0; cnt < size; cnt++) {
  112.             c = bb[cnt];
  113.             kprintf("%lc", isprint(c) ? c : '.');
  114.         }
  115.         kprintf("\n");
  116.     } else if (size >= 2) {
  117.         UWORD bw[2];
  118.         UBYTE *bb;
  119.         memcpy(&bw[0], buffer, sizeof(UWORD) * 2);
  120.         bb = (UBYTE *)&bw[0];
  121.         kprintf("%08lx: %04lx ", addr, bw[0]);
  122.         for (cnt = 2; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  123.         for (cnt = size; cnt < 8; cnt++) kprintf("  ");
  124.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  125.         kprintf("                    ");
  126.         for (cnt = 0; cnt < size; cnt++) {
  127.             c = bb[cnt];
  128.             kprintf("%lc", isprint(c) ? c : '.');
  129.         }
  130.         kprintf("\n");
  131.     } else if (size > 0) {
  132.         UWORD bw[1];
  133.         UBYTE *bb;
  134.         memcpy(&bw[0], buffer, sizeof(UWORD) * 1);
  135.         bb = (UBYTE *)&bw[0];
  136.         kprintf("%08lx: ", addr);
  137.         for (cnt = 0; cnt < size; cnt++) kprintf("%02lx", bb[cnt]);
  138.         for (cnt = size; cnt < 4; cnt++) kprintf("  ");
  139.         for (cnt = size/4; cnt < 16/4; cnt++) kprintf(" ");
  140.         kprintf("                             ");
  141.         for (cnt = 0; cnt < size; cnt++) {
  142.             c = bb[cnt];
  143.             kprintf("%lc", isprint(c) ? c : '.');
  144.         }
  145.         kprintf("\n");
  146.     }
  147. }
  148. /* \\\ */
  149.  
  150. /* /// "fhexdump" */
  151. void fhexdump( BPTR fh,
  152.                UBYTE *buffer,
  153.                LONG size )
  154. {
  155.     ULONG cnt;
  156.     UBYTE c;
  157.     ULONG addr;
  158.  
  159.     addr = 0;
  160.     while (size >= 16) {
  161.         UWORD bw[8];
  162.         UBYTE *bb;
  163.         memcpy(&bw[0], buffer, sizeof(UWORD) * 8);
  164.         bb = (UBYTE *)&bw[0];
  165.         FPrintf(fh, "%08lx: %04lx %04lx %04lx %04lx %04lx %04lx %04lx %04lx  ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5], bw[6], bw[7]);
  166.         for (cnt = 0; cnt < 16; cnt++) {
  167.             c = bb[cnt];
  168.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  169.         }
  170.         FPrintf(fh, "\n");
  171.         size -= 16;
  172.         addr += 16;
  173.         buffer += 16;
  174.     }
  175.     if (size >= 14) {
  176.         UWORD bw[8];
  177.         UBYTE *bb;
  178.         memcpy(&bw[0], buffer, sizeof(UWORD) * 8);
  179.         bb = (UBYTE *)&bw[0];
  180.         FPrintf(fh, "%08lx: %04lx %04lx %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5], bw[6]);
  181.         for (cnt = 14; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  182.         for (cnt = size; cnt < 16; cnt++) FPrintf(fh, "  ");
  183.         FPrintf(fh, "  ");
  184.         for (cnt = 0; cnt < size; cnt++) {
  185.             c = bb[cnt];
  186.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  187.         }
  188.         FPrintf(fh, "\n");
  189.     } else if (size >= 12) {
  190.         UWORD bw[7];
  191.         UBYTE *bb;
  192.         memcpy(&bw[0], buffer, sizeof(UWORD) * 7);
  193.         bb = (UBYTE *)&bw[0];
  194.         FPrintf(fh, "%08lx: %04lx %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4], bw[5]);
  195.         for (cnt = 12; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  196.         for (cnt = size; cnt < 16; cnt++) FPrintf(fh, "  ");
  197.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  198.         FPrintf(fh, "  ");
  199.         for (cnt = 0; cnt < size; cnt++) {
  200.             c = bb[cnt];
  201.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  202.         }
  203.         FPrintf(fh, "\n");
  204.     } else if (size >= 10) {
  205.         UWORD bw[6];
  206.         UBYTE *bb;
  207.         memcpy(&bw[0], buffer, sizeof(UWORD) * 6);
  208.         bb = (UBYTE *)&bw[0];
  209.         FPrintf(fh, "%08lx: %04lx %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3], bw[4]);
  210.         for (cnt = 10; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  211.         for (cnt = size; cnt < 16; cnt++) FPrintf(fh, "  ");
  212.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  213.         FPrintf(fh, "  ");
  214.         for (cnt = 0; cnt < size; cnt++) {
  215.             c = bb[cnt];
  216.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  217.         }
  218.         FPrintf(fh, "\n");
  219.     } else if (size >= 8) {
  220.         UWORD bw[5];
  221.         UBYTE *bb;
  222.         memcpy(&bw[0], buffer, sizeof(UWORD) * 5);
  223.         bb = (UBYTE *)&bw[0];
  224.         FPrintf(fh, "%08lx: %04lx %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2], bw[3]);
  225.         for (cnt = 8; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  226.         for (cnt = size; cnt < 12; cnt++) FPrintf(fh, "  ");
  227.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  228.         FPrintf(fh, "           ");
  229.         for (cnt = 0; cnt < size; cnt++) {
  230.             c = bb[cnt];
  231.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  232.         }
  233.         FPrintf(fh, "\n");
  234.     } else if (size >= 6) {
  235.         UWORD bw[4];
  236.         UBYTE *bb;
  237.         memcpy(&bw[0], buffer, sizeof(UWORD) * 4);
  238.         bb = (UBYTE *)&bw[0];
  239.         FPrintf(fh, "%08lx: %04lx %04lx %04lx ", addr, bw[0], bw[1], bw[2]);
  240.         for (cnt = 6; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  241.         for (cnt = size; cnt < 8; cnt++) FPrintf(fh, "  ");
  242.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  243.         FPrintf(fh, "                   ");
  244.         for (cnt = 0; cnt < size; cnt++) {
  245.             c = bb[cnt];
  246.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  247.         }
  248.         FPrintf(fh, "\n");
  249.     } else if (size >= 4) {
  250.         UWORD bw[3];
  251.         UBYTE *bb;
  252.         memcpy(&bw[0], buffer, sizeof(UWORD) * 3);
  253.         bb = (UBYTE *)&bw[0];
  254.         FPrintf(fh, "%08lx: %04lx %04lx ", addr, bw[0], bw[1]);
  255.         for (cnt = 4; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  256.         for (cnt = size; cnt < 8; cnt++) FPrintf(fh, "  ");
  257.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  258.         FPrintf(fh, "                    ");
  259.         for (cnt = 0; cnt < size; cnt++) {
  260.             c = bb[cnt];
  261.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  262.         }
  263.         FPrintf(fh, "\n");
  264.     } else if (size >= 2) {
  265.         UWORD bw[2];
  266.         UBYTE *bb;
  267.         memcpy(&bw[0], buffer, sizeof(UWORD) * 2);
  268.         bb = (UBYTE *)&bw[0];
  269.         FPrintf(fh, "%08lx: %04lx ", addr, bw[0]);
  270.         for (cnt = 2; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  271.         for (cnt = size; cnt < 8; cnt++) FPrintf(fh, "  ");
  272.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  273.         FPrintf(fh, "                    ");
  274.         for (cnt = 0; cnt < size; cnt++) {
  275.             c = bb[cnt];
  276.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  277.         }
  278.         FPrintf(fh, "\n");
  279.     } else if (size > 0) {
  280.         UWORD bw[1];
  281.         UBYTE *bb;
  282.         memcpy(&bw[0], buffer, sizeof(UWORD) * 1);
  283.         bb = (UBYTE *)&bw[0];
  284.         FPrintf(fh, "%08lx: ", addr);
  285.         for (cnt = 0; cnt < size; cnt++) FPrintf(fh, "%02lx", bb[cnt]);
  286.         for (cnt = size; cnt < 4; cnt++) FPrintf(fh, "  ");
  287.         for (cnt = size/4; cnt < 16/4; cnt++) FPrintf(fh, " ");
  288.         FPrintf(fh, "                             ");
  289.         for (cnt = 0; cnt < size; cnt++) {
  290.             c = bb[cnt];
  291.             FPrintf(fh, "%lc", isprint(c) ? c : '.');
  292.         }
  293.         FPrintf(fh, "\n");
  294.     }
  295. }
  296. /* \\\ */
  297.  
  298.